package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	addr := &net.UDPAddr{
		IP:   net.ParseIP("127.0.0.1"),
		Port: 1888,
	}
	udp, err := net.ListenUDP("udp", addr)
	if err != nil {
		log.Fatal(err)
		return
	}
	defer udp.Close()

	data := make([]byte, 1024)
	for {
		n, udpAddr, err := udp.ReadFromUDP(data)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Printf("消息来源：%s，消息内容：%s\n", udpAddr.String(), string(data[:n]))
		//监听模式下，conn只能读取数据，不能用连接对象回复数据，因为没有记录消息的来源地址，想要回复需要手动指定发送的目标地址
		_, err = udp.Write([]byte("world"))
		if err != nil {
			log.Fatal("发送消息异常", err)
		}
	}
}
